/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-基础组件封装层-SpringBoot组件封装-缺省实现
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.boot.web.autoconfigure;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.taipingframework.boot.web.properties.SecurityProperty;
import com.taipingframework.boot.web.properties.TokenProperty;
import com.taipingframework.boot.web.response.result.HttpsResult;
import com.taipingframework.boot.web.security.SecretHandler;
import com.taipingframework.boot.web.security.TokenHandler;
import com.taipingframework.boot.web.support.ConfigHelper;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class SecurityAutoConfiguration {

    /**
     * 配置 字符加密处理器
     */
    @Bean
    @ConfigurationProperties(prefix = "application.security")
    public SecurityProperty securityProperty() {
        return new SecurityProperty();
    }

    /**
     * 字符加密处理器
     */
    @Bean
    public SecretHandler secretHandler(SecurityProperty securityProperty) {
        return new SecretHandler(securityProperty);
    }

    /**
     * open api 网络安全传输HTTPS请求的响应对象
     */
    @Bean
    public HttpsResult httpsResult(ObjectMapper objectMapper) {
        return new HttpsResult(objectMapper);
    }

    /**
     * 为web用户颁发签名参数
     */
    @Bean
    @ConfigurationProperties(prefix = "application.token")
    public TokenProperty tokenProperty() {
        return new TokenProperty();
    }

    /**
     * 为web用户颁发签名
     */
    @Bean
    public TokenHandler tokenHandler(TokenProperty tokenProperty) {
        return new TokenHandler(tokenProperty);
    }

    /**
     * 配置文件敏感信息处理器(此api只用于调试目的)
     * 在yaml中的写法，如下：
     * spring.datasource.password: ENC(密文)
     */
    @Bean
    public ConfigHelper defaultConfigHandler(StringEncryptor encryptor) {
        return new ConfigHelper(encryptor);
    }

}
